import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * user:likai
 * Date:2023-03-17
 * Time:20:49
 */
class Solution {
    //删除元素
    public int removeElement(int[] nums, int val) {
        int sum= nums.length;
        if(sum==0){
            return 0;
        }
        int left=0;
        int right=sum-1;
        while(left<right){
            if(nums[left]==val&&nums[right]!=val){
                nums[left]=nums[right];
                nums[right]=0;
                left++;
                right--;
                sum--;
            }
            if(nums[left]!=val){
                left++;
            }
            if(nums[right]==val){
                nums[right]=0;
                right--;
                sum--;
            }

        }
        if(nums[right]==val){
            nums[right]=0;
            sum--;
        }
        return sum;
    }
    public int removeElement1(int[] nums, int val) {
        int slow=0;
        for(int fast=0;fast<nums.length;fast++){
            if(val!=nums[fast]){
                nums[slow++]=nums[fast];
            }
        }
        return slow;
    }
    //删除重复项
    public int removeDuplicates(int[] nums) {
        if(nums.length<2){
            return nums.length;
        }
        int sum=0;
        int cur=1;
        //一直找到相等的
        while(nums[cur]!=nums[sum]){
            cur++;
            sum++;
            if(cur>= nums.length){
                break;
            }
        }
        while(cur<nums.length){
            int pre=sum+1;
            if(nums[cur]==nums[sum]){
                cur++;
            }else{
                nums[pre]=nums[cur];
                sum++;
            }
        }
        return sum+1;
    }
    //把0元素放到最后
    //不保证顺序
    public void moveZeroes(int[] nums) {
        int left=0;
        int right=nums.length-1;
        while(right>left){
            if(nums[left]==0&&nums[right]!=0){
                int tmp=nums[left];
                nums[left++]=nums[right];
                nums[right--]=tmp;
            }else if(nums[left]==0&&nums[right]==0){
                right--;
            }else{
                left++;
            }
        }
    }
    //保证顺序
    public void moveZeroes1(int[] nums) {
        int slow=0;
        for(int fast=0;fast<nums.length;fast++){
            if(nums[fast]!=0){
                nums[slow++]=nums[fast];
            }
        }
        while(slow<nums.length){
            nums[slow]=0;
            slow++;
        }
    }
    //比较含退格的字符串
//    public boolean backspaceCompare(String s, String t) {
//        int sf=s.length();
//        int sl=sf;
//        int tf=s.length();
//        int tl=t.length();
//        while(sf>-1&&tf>-1){
//            while()
//        }
//    }

    public boolean backspaceCompare2(String s, String t) {
        int s1=s.length()-1;
        int backS=0;
        int t1=t.length()-1;
        int backT=0;
        while(true){
            //从后往前遍历
            while(s1>=0){
                if(s.charAt(s1)=='#'){
                    backS++;
                }else{
                    if(backS>0){
                        backS--;
                    }else{
                        break;
                    }
                }
                s1--;
            }
            while(t1>=0){
                if(t.charAt(t1)=='#'){
                    backT++;
                }else{
                    if(backT>0){
                        backT--;
                    }else{
                        break;
                    }
                }
                t1--;
            }
            if(s1<0||t1<0){
                break;
            }
            //退格退完之后，就可以比较
            if(s.charAt(s1)!=t.charAt(t1)){
                return false;
            }
            s1--;
            t1--;
        }
        if(s1==-1&&t1==-1) {
            return true;
        }else{
            return false;
        }
    }
    //平方排序
    public int[] sortedSquares(int[] nums) {
            int l=0;
            int r= nums.length-1;
            int index= nums.length-1;
            int []arr=new int[r+1];
            while(index>=0){
                int left=nums[l]*nums[l];
                int right=nums[r]*nums[r];
                if(left>right){
                    arr[index--]=left;
                    l++;
                }else {
                    arr[index--] = right;
                    r--;
                }
            }
            return arr;
    }
    //滑动窗口
    public int minSubArrayLen(int target, int[] nums) {
//        int i=0;
//        int j=0;
//        int sum=0;
//        int min=nums.length;//计数有问题，可能数组长度没这个数大
//        while(j<nums.length){
//            sum+=nums[j++];
//            while(sum>=target){
//                if(j-i+1<min){
//                    min=j-i+1;
//                    sum-=nums[i++];
//                }
//            }
//        }
//        return min;
            int i = 0;
            int sum = 0;
            int result = 0;
            for(int j = 0; j < nums.length; j++){
                sum += nums[j];
                while(sum >= target){
                    if(result == 0 || j-i+1 < result) result = j - i + 1;
                    sum -= nums[i++];
                }
            }
            return result;
    }
    public int[][] generateMatrix(int n) {
        int [][]arr=new int [n][n];
        int circle=0;//循环多少次 n/2次
        int x=1;
        while(circle<n/2){
            //从左到右
            //从什么位置开始
            for(int i=circle;i<n-circle-1;i++){
                int j=circle;
                arr[j][i]=x;
                x++;
            }
            //右到下
            for(int i=circle;i<n-circle-1;i++){
                int j=n-circle-1;
                arr[i][j]=x;
                x++;
            }
            //右到左
            for(int i=n-circle-1;i>circle;i--){
                int j=n-circle-1;
                arr[j][i]=x;
                x++;
            }
            //左到上
            for(int i=n-circle-1;i>circle;i--){
                int j=circle;
                arr[i][j]=x;
                x++;
            }
            circle++;
        }
        if(n%2!=0){
            arr[n/2][n/2]=n*n;
        }
        return arr;
    }
    public List<Integer> spiralOrder(int[][] matrix) {
        int m=matrix.length;
        int n=matrix[0].length;
        int bottom=m-1;
        int right=n-1;
        int top=0;
        int left=0;
        List<Integer> list=new ArrayList<>(m*n);
        while(list.size()< m * n){
            if(top<=bottom){
                for(int i=left;i<=right;i++){
                    list.add(matrix[top][i]);
                }
                top++;
            }
            if(left<=right){
                for(int i=top;i<=bottom;i++){
                    list.add(matrix[i][right]);
                }
                right--;
            }
            if(top<=bottom){
                for(int i=right;i>=left;i--){
                    list.add(matrix[bottom][i]);
                }
                bottom--;
            }
            if(left<=right){
                for(int i=bottom;i>=top;i--){
                    list.add(matrix[i][left]);
                }
                left++;
            }
        }
        //
        return list;
    }
}
public class Test {
    public static void main(String[] args) {
        Solution s=new Solution();
        String s1="a#b#";
        String t1="aa##";
        //s.backspaceCompare2(s1,t1);
//        int i=1;
//        while(i<100){
//            while(i>10){
//                System.out.println(i);
//                break;
//            }
//            i++;
//        }
//        System.out.println(i);
        int []arr={2,3,1,2,4,3};
        int target=7;
        s.minSubArrayLen(target,arr);
    }
}
